package bean;

import java.io.IOException;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;

import util.AgendaSingleton;
import util.JSFUtil;
import dominio.Agenda;
import dominio.Documento;
import dominio.Endereco;
import dominio.Pessoa;
import dominio.Telefone;
import exceptions.PessoaNotExistentException;

/**
 * asfsfasf.
 * @author Tyago
 *
 */
@ManagedBean
@SessionScoped
public class PessoaBean {

	private Pessoa pessoa;
	private Documento documento;
	private Endereco endereco;
	private Telefone telefone;

	public PessoaBean() {
		documento = new Documento();
		endereco = new Endereco();
		telefone = new Telefone();
	}

	public void preAddPessoa(ActionEvent evt) throws IOException {
		pessoa = new Pessoa();
		pessoa.setId(0);
		JSFUtil.forward("faces/pessoa.jsp");
	}

	public void preUpdatePessoa(ActionEvent evt) throws IOException {
		String idStr = JSFUtil.getRequest().getParameter("id");
		int id = Integer.parseInt(idStr);
		Agenda a = AgendaSingleton.getInstance();
		for (Pessoa p : a.getPessoas()) {
			if (p.getId() == id) {
				pessoa = p;
				break;
			}
		}
		JSFUtil.forward("faces/pessoa.jsp");
	}

	public void salvar(ActionEvent evt) throws PessoaNotExistentException,
			IOException {
		Agenda a = AgendaSingleton.getInstance();
		if (pessoa.getNome() == null || pessoa.getNome().trim().isEmpty()) {
			JSFUtil.addMensagem("Nome invalido");
		}
		if (pessoa.getDocumentos().isEmpty()) {
			JSFUtil.addMensagem("Pelo menos um documento deve ser cadastrado");
		}
		if (JSFUtil.getContext().getMessages().hasNext()) {
			return;
		}
		if (pessoa.getId() == 0) {
			pessoa.setId(++Pessoa.contador);
			a.addPessoa(pessoa);
			JSFUtil.addMensagem("Pessoa cadastrada com sucesso");
		} else {
			a.updatePessoa(pessoa);
			JSFUtil.addMensagem("Pessoa Alterada com sucesso");
		}
		JSFUtil.forward("faces/agenda.jsp");
	}

	public void removePessoa(ActionEvent evt)
			throws PessoaNotExistentException, IOException {
		String idStr = JSFUtil.getRequest().getParameter("id");
		Pessoa p = new Pessoa();
		p.setId(Integer.parseInt(idStr));
		Agenda a = AgendaSingleton.getInstance();
		a.removePessoa(p);
		JSFUtil.addMensagem("Pessoa removida com sucesso");
	}

	public void addDocumento(ActionEvent evt)
			throws PessoaNotExistentException, IOException {
		documento.setId(++Documento.contador);
		pessoa.addDocumento(documento);
		documento = new Documento();
		JSFUtil.addMensagem("Documento adicionado com sucesso");
	}
	
	public void addTelefone(ActionEvent evt)
			throws PessoaNotExistentException, IOException {
		telefone.setId(++Telefone.contador);
		pessoa.addTelefone(telefone);
		telefone = new Telefone();
		JSFUtil.addMensagem("Telefone adicionado com sucesso");
	}
	
	public void addEndereco(ActionEvent evt)
			throws PessoaNotExistentException, IOException {
		endereco.setId(++Endereco.contador);
		pessoa.addEndereco(endereco);
		endereco = new Endereco();
		JSFUtil.addMensagem("Endereco adicionado com sucesso");
	}

	public Pessoa getPessoa() {
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}

	public Documento getDocumento() {
		return documento;
	}

	public void setDocumento(Documento documento) {
		this.documento = documento;
	}

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public Telefone getTelefone() {
		return telefone;
	}

	public void setTelefone(Telefone telefone) {
		this.telefone = telefone;
	}

}
